<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>生成器</title>
</head>

<body>
    <script>

        /* 
         * 生成器: 异步编程的一种解决方案
         *  
         *  - * 的位置没有限制
         *  - 生成器函数返回的结果是迭代器对象, 通过迭代器对象的next方法可以得到包含value和done属性的对象, 其中value的值就是yield语句后的值  
         *  - yield就是函数的分隔符, 每调用一次next方法, 执行一段代码
         *  - next 方法可以传递实参, 这个实参会作为上一次yield执行的结果
         * 
         */ 
     
        // 异步编程  纯回调函数
        function* gen() {
            // console.log(111);
            yield 'aa';
            // console.log(222);
            yield 'bb';
            // console.log(333);
            yield 'cc';
            // console.log(444);
        }

        let iterator = gen(); // 只是创建了这个函数的句柄, 并没有实际执行
        console.log(iterator.next()); // {value: 'aa', done: false}
        console.log(iterator.next()); // {value: 'bb', done: false}
        console.log(iterator.next()); // {value: 'cc', done: false}
        console.log(iterator.next()); // {value: 'undefined', done: true}

        // 遍历
        for (let v of gen()) {
            console.log(v);
        }

    </script>
</body>

</html>